/*
1、promise是一个类，在执行这个类的时候需要传递一个执行器进去，执行器会立即执行，执行器其实就是一个回掉函数
    这个回掉函数有两个参数 resolve和reject
2、promise中有三种状态： pedding、fulfilled、rejected
    调用resolve状态是从pedding变到fulfilled；调用rejected状态是从pedding变到rejected
    如果状态不是等待pedding阻止程序向下执行，状态已经确定就不可更改
3、所以可以这样说：resolve和reject这两个函数是用来更改状态的
4、then方法内部要做的就是判断状态，如果状态是成功就调用成功回掉函数，如果是失败就调用失败的回掉函数，
    每个promise对象都会调用到then这个方法，then方法是被定义在原型对象上的方法
5、then成功回调有一个参数表示成功之后的值，then失败回调有一个参数表示失败后的值
6、promise.all()接收一个数组作为参数，在这个数组中可以是普通值或是promise对象
    在数组中的顺序一定是得到的结果的顺序
    promise.all()的返回值也是一个promise对象，所以可以链式调用all方法，
    在all中如果所有的状态都是成功的那么结果也是成功的，如果有一个是失败的最终结果也是失败的
    all方法是用一个类然后直接.all方式来调用的， 所以all是一个静态方法

7、finally（） 无论当前promise方法是成功还是失败， finally中的回调函数始终都会被执行一次
    可以调用then方法拿到当前promise对象最终返回的结果
    finally不是静态方法，需要定义在当前类的原型对象上
 */
const MyPromise = require('./myPromise')
function p1 () {
    return new MyPromise((resolve, reject) => {
        reject('12232')
    })
}
function p2 () {
    return new MyPromise((resolve, reject) => {
        setTimeout(() => {
            resolve('p2成功后返回的值是promise')
        }, 2000)
    })
}
p1().then(res => {console.log(res)})
.catch(err => {console.log(err)})